﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using GandAInvitaciones.Common.Objects;

namespace GandAInvitaciones.Base
{
    public class PageBase : System.Web.UI.Page
    {
        private List<Parametro> SessionParametros
        {
            get
            {
                if (Session["Parametros"] == null)
                {
                    return new List<Parametro>();
                }
                return (List<Parametro>)Session["Parametros"];
            }
            set { Session["Parametros"] = value; }
        }

        public List<Parametro> ViewParametros
        {
            get
            {
                if (ViewState["Parametros"] == null)
                {
                    return new List<Parametro>();
                }
                return (List<Parametro>)ViewState["Parametros"];
            }
            set { ViewState["Parametros"] = value; }
        }

        public string SessionUrlOriginal
        {
            get
            {
                if (Session["UrlOriginal"] != null)
                    return Session["UrlOriginal"].ToString();
                else
                    return "";
            }
            set { Session["UrlOriginal"] = value; }
        }

        protected override void OnLoad(EventArgs e)
        {
            // Verifico si la session esta activa
            //if (SessionUsuario.IdSession == null && (Page.ToString() != "ASP.account_login_aspx" && Page.ToString() != "ASP.pagecommon_error_aspx"))
            //{
            //    if (Page.Master.ToString() != "ASP.popup_master")
            //    {
            //        Response.Redirect(ResolveUrl("~/Account/Login.aspx"), true);
            //    }
            //}

            if (this.SessionParametros.Count == 0)
            {
                this.SessionUrlOriginal = this.Page.Request.Url.OriginalString;
            }

            setParametros();
            base.OnLoad(e);
        }

        protected override void OnLoadComplete(EventArgs e)
        {
            //if (SessionUsuario.IdSession == null && Page.ToString() != "ASP.account_login_aspx")
            //{
            //    if (Page.Master.ToString() == "ASP.popup_master")
            //    {
            //        EjecutaJavaScript("ClosePopUpCurrent();", Page.IsPostBack == true ? false : true);
            //    }
            //}

            base.OnLoadComplete(e);
        }

        protected override void OnPreInit(EventArgs e)
        {
            //if (Page.ToString() != "ASP.account_login_aspx")
            //{
            //    Page.Theme = string.IsNullOrEmpty(SessionLaboratorio.Tema) ? "Default" : SessionLaboratorio.Tema;
            base.OnPreInit(e);
            //}
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            ////Verifico seguridad
            //if (Page.ToString() != "ASP.account_login_aspx" && Page.ToString() != "ASP.default_aspx" && Page.ToString() != "ASP.pagecommon_permiso_aspx" && Page.ToString() != "ASP.pagecommon_error_aspx")
            //{
            //    GandA.Component.Security.PermisoItem pi = new GandA.Component.Security.PermisoItem();
            //    GandA.Component.Security.Permisos p = new GandA.Component.Security.Permisos("BD");
            //    pi = p.ObtenPermisoItem(IdItem, SessionUsuario.Perfil);
            //    if (pi.PermisoAcceso == 0)
            //    {
            //        Response.Redirect("~/PageCommon/Permiso.aspx", true);
            //    }
            //}
        }

        private void setParametros()
        {
            if (this.SessionParametros.Count == 0)
            {
                Parametro oParam;
                this.SessionParametros = new List<Parametro>();
                for (int i = 0; i < Request.QueryString.Count; i++)
                {
                    oParam = new Parametro();

                    oParam.Acceso = 1;
                    oParam.Nombre = Request.QueryString.GetKey(i);
                    oParam.Valor = HttpUtility.UrlDecode(Request.QueryString[oParam.Nombre]);

                    this.SessionParametros.Add(oParam);
                }

                if (Request.QueryString.Count > 0)
                {
                    Response.Redirect(this.Page.Request.AppRelativeCurrentExecutionFilePath);
                }
            }
            else
            {
                ViewParametros = SessionParametros;
                SessionParametros = new List<Parametro>();
            }
        }

        public void EjecutaJavaScript(string script, bool esEnLoad)
        {
            if (!esEnLoad)
            {
                ////RegisterOnSubmitStatement("javascrip","<script type='text/javascript'>" + script + "</script>");
                ClientScript.RegisterClientScriptBlock(typeof(PageBase), "javascript", script, true);
            }
            else
            {
                ClientScript.RegisterStartupScript(typeof(PageBase), "javascript", script, true);
            }
        }

        public static ConsultaServiceReference.Parameter CreaParametroConsulta(string _nombreParametro, object _valor, ConsultaServiceReference.Parameter.vEnumType _type)
        {
            ConsultaServiceReference.Parameter p = new ConsultaServiceReference.Parameter();
            p.nombreParametro = _nombreParametro;
            p.valor = _valor;
            p.type = _type;

            return p;
        }

        /// <summary>
        /// Recupera la dirección ip del visitante de la web
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>IP del usuario</returns>
        public static string GetDireccionIp(System.Web.HttpRequest request)
        {
            // Recuperamos la IP de la máquina del cliente
            // Primero comprobamos si se accede desde un proxy
            string ipAddress1 = request.ServerVariables["HTTP_X_FORWARDED_FOR"];
            // Acceso desde una máquina particular
            string ipAddress2 = request.ServerVariables["REMOTE_ADDR"];

            string ipAddress = string.IsNullOrEmpty(ipAddress1) ? ipAddress2 : ipAddress1;

            // Devolvemos la ip
            return ipAddress;
        }

        public static string GetReferencesUrl(System.Web.HttpRequest request)
        {
            return request.ServerVariables["HTTP_REFERER"];
        }

        //public int IdItem
        //{
        //    get
        //    {
        //        if (ViewState["IdItem"] == null)
        //        {
        //            return 0;
        //        }
        //        return (int)ViewState["IdItem"];
        //    }
        //    set { ViewState["IdItem"] = value; }
        //}
    }
}